package com.xgj.config;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//hutool下的雪花算法
/**
 * Snowflake 配置类
 * 用于创建并配置雪花算法（Snowflake）实例，并将其注册为 Spring Bean。
 */
@Configuration // 标记该类为 Spring 配置类，Spring 会扫描并加载该类中的 Bean 定义
public class SnowflakeConfig {

    @Value("${snowflake.worker-id}") // 从配置文件中读取 workerId
    private long workerId;

    @Value("${snowflake.datacenter-id}") // 从配置文件中读取 datacenterId
    private long datacenterId;

    /**
     * 创建并配置雪花算法（Snowflake）实例
     *
     * @return Snowflake 实例，用于生成分布式唯一 ID
     */
    @Bean // 标记该方法返回的对象为 Spring Bean，Bean 的名称为方法名（即 snowflake）
    public Snowflake snowflake() {
        // 使用 Hutool 工具库的 IdUtil.getSnowflake() 方法创建雪花算法实例
        // 参数1：workerId（机器 ID），范围 0~31，从配置文件中读取
        // 参数2：datacenterId（数据中心 ID），范围 0~31，从配置文件中读取
        return IdUtil.getSnowflake(workerId, datacenterId); //1,1
    }
}
